using System;
using System.Collections.Generic;
using Csla;
using System.Data;
using ENT.GP.Datos.MysqlHelper;

namespace ENT.GP.Core.Autenticacion
{
    [Serializable]
    public class UsuarioLista :
      ReadOnlyListBase<UsuarioLista, UsuarioInfo>
    {
        #region Authorization Rules

        private static void AddObjectAuthorizationRules()
        {
            // TODO: add authorization rules
            //AuthorizationRules.AllowGet(typeof(UsuarioLista), "Role");
        }

        #endregion

        #region Factory Methods

        public static UsuarioLista GetUsuarioLista(UsuarioCriterio filter)
        {
            return DataPortal.Fetch<UsuarioLista>(filter);
        }

        private UsuarioLista()
        { /* require use of factory methods */ }

        #endregion


        #region Data Access

        private void DataPortal_Fetch(UsuarioCriterio criteria)
        {
            RaiseListChangedEvents = false;
            IsReadOnly = false;

            HelperMySql objhm = HelperMySql.ObtenerConexion("");
            MySql.Data.MySqlClient.MySqlParameter[] parametros = new MySql.Data.MySqlClient.MySqlParameter[3];
            parametros[0] = new MySql.Data.MySqlClient.MySqlParameter("IDROL", criteria.RolId);
            parametros[1] = new MySql.Data.MySqlClient.MySqlParameter("NOMBRE", criteria.Nombre);
            parametros[2] = new MySql.Data.MySqlClient.MySqlParameter("IDEMPR", criteria.IDEmpresa);
            foreach (DataRow items in objhm.EjecutarStoreProcedure(parametros, "BuscarUsuarios").Tables[0].Rows)
            {
                this.Add(UsuarioInfo.GetUsuarioInfo(items));
            }

            IsReadOnly = true;
            RaiseListChangedEvents = true;
        }

        #endregion
    }


    [Serializable]
    public class UsuarioInfo : ReadOnlyBase<UsuarioInfo>
    {
        #region Business Methods

        // TODO: add your own fields, properties and methods

        public int Id { get; private set; }
        public string Nombre { get; private set; }
        public string Apellido { get; private set; }
        public string Usuario { get; private set; }
        public string Rol { get; private set; }
        public int RolId { get; private set; }
        public string Email { get; private set; }
        public string Telefono { get; private set; }
        public string Estado { get; private set; }
        public int IdEmpresa { get; private set; }
        #endregion

        #region Factory Methods

        internal static UsuarioInfo GetUsuarioInfo(object childData)
        {
            return DataPortal.FetchChild<UsuarioInfo>(childData);
        }

        private UsuarioInfo()
        { /* require use of factory methods */ }

        #endregion

        #region Data Access

        private void Child_Fetch(DataRow childData)
        {
            Id = Convert.ToInt32(childData[0].ToString());
            RolId = Convert.ToInt32(childData[1].ToString());
            Nombre = childData[2].ToString();
            Apellido = childData[3].ToString();
            Usuario = childData[4].ToString();
            Telefono = childData[8].ToString();
            Email = childData[9].ToString();
            Rol = childData[12].ToString();
            Estado = childData[7].ToString();

        }

        #endregion
    }
}
